package review.Day_0330;

import java.util.Stack;

/**
 * @author zxc
 * @date 2023/03/30 23:11
 **/
public class Solution02 {
    // 思路 ：辅助栈与主栈相对应，在主栈进行元素的增删时，存储当前主栈中最小元素;
    Stack<Integer> stack;
    Stack<Integer> temp;
    public Solution02() {
        stack = new Stack<>();
        temp = new Stack<>();
        temp.push(Integer.MAX_VALUE);
    }
    // 向主栈中插入元素;（同时需要向辅助栈中，添加当前主栈的最小元素）
    public void push(int x) {
        stack.push(x);
        Integer minValue = temp.peek();
        if(x < minValue){
            temp.push(x);
        }
        else {
            temp.push(minValue);
        }
    }
    // 弹出主栈中元素;（同时需要将辅助栈中的栈顶元素删除）
    public void pop() {
        stack.pop();
        temp.pop();
    }
    // 返回当前主栈的栈顶元素;（主栈中元素顺序是固定的;）
    public int top() {
        if(!stack.isEmpty()){
            return stack.peek();
        }
        return -1;
    }
    // 返回当前主栈中的最小元素;
    // 需要满足的条件 ：其时间复杂度为O（1）;
    public int min() {
        return temp.peek();
    }
}
